/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SecureDelete;

import SecureDelete.Table.FileDescription;
import SecureDelete.Table.FileDescriptionModel;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.File;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

/**
 *
 * @author Diego
 */
public class Main extends javax.swing.JFrame {
    
    private static ArrayList<FileDescription> lst = new ArrayList<>();
    private int id = 0;
    
    public static void CleanList(){
        lst.clear();
    }
    
    private void initConfig(){
        ClassLoader cl = this.getClass().getClassLoader();
        
        ImageIcon ico = new ImageIcon(cl.getResource("fire32.png"));
        this.setIconImage(ico.getImage());
        
        jTable.setDragEnabled(true);
        
        CenterScreen();
        spnTimes.setValue(1);
    }
    
    private void CenterScreen(){
        // Get the size of the screen
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

        // Determine the new location of the window
        int w = this.getSize().width;
        int h = this.getSize().height;
        int x = (dim.width-w)/2;
        int y = (dim.height-h)/2;

        // Move the window
        this.setLocation(x, y);
    }
    
    private void OpenFiles(){
        
        JFileChooser file = new JFileChooser();
        file.setMultiSelectionEnabled(true);
        file.showOpenDialog(null);
        
        File[] files = file.getSelectedFiles();
        
        for (File f : files) {
            lst.add(new FileDescription(id++, f.getAbsolutePath()));
        }
        
        FileDescriptionModel model = new FileDescriptionModel(lst);
        jTable.setModel(model);
        lblTotalFiles.setText(String.valueOf(files.length));
        
    }

    /**
     * Creates new form Main
     */
    public Main() {
        initComponents();
        initConfig();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlFiles = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTable = new javax.swing.JTable();
        btnDelete = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        cmbMethod = new javax.swing.JComboBox();
        chkRename = new javax.swing.JCheckBox();
        jLabel2 = new javax.swing.JLabel();
        lblDescription = new javax.swing.JLabel();
        spnTimes = new javax.swing.JSpinner();
        jLabel4 = new javax.swing.JLabel();
        btnAdd = new javax.swing.JButton();
        btnRemove = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        lblTotalFiles = new javax.swing.JLabel();
        mnuBar = new javax.swing.JMenuBar();
        mnuFile = new javax.swing.JMenu();
        mnuAdd = new javax.swing.JMenuItem();
        mnuDelete = new javax.swing.JMenuItem();
        mnuExit = new javax.swing.JMenuItem();
        mnuHelp = new javax.swing.JMenu();
        mnuSubHelp = new javax.swing.JMenuItem();
        mnuAbout = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Catalano Secure Delete 0.8");
        setResizable(false);

        pnlFiles.setBorder(javax.swing.BorderFactory.createTitledBorder("Files"));

        jTable.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        jTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Path"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        jScrollPane2.setViewportView(jTable);

        javax.swing.GroupLayout pnlFilesLayout = new javax.swing.GroupLayout(pnlFiles);
        pnlFiles.setLayout(pnlFilesLayout);
        pnlFilesLayout.setHorizontalGroup(
            pnlFilesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlFilesLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 962, Short.MAX_VALUE)
                .addContainerGap())
        );
        pnlFilesLayout.setVerticalGroup(
            pnlFilesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE)
        );

        btnDelete.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        btnDelete.setIcon(new javax.swing.ImageIcon(getClass().getResource("/del24.png"))); // NOI18N
        btnDelete.setText("Delete");
        btnDelete.setToolTipText("Delete files permanently.");
        btnDelete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnDeleteActionPerformed(evt);
            }
        });

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Configuration", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Verdana", 0, 12))); // NOI18N

        jLabel1.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/method24.png"))); // NOI18N
        jLabel1.setText("Method:");

        cmbMethod.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        cmbMethod.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Zero Overwrite (1 Pass)", "Random Data (1 Pass)", "GOST R 50738-95 (2 Passes)", "DoD 5220.22-M (3 Passes)", "AR 380-19 (3 Passes)", "AFSSI-5020 (3 Passes)", "NAVSO P-5239-26 (3 Passes)", "Schneier (7 Passes)", "Pfitzner (33 Passes)", "Gutmann (35 Passes)" }));
        cmbMethod.setToolTipText("Method to be used.");
        cmbMethod.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbMethodActionPerformed(evt);
            }
        });

        chkRename.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        chkRename.setSelected(true);
        chkRename.setText("Rename file");
        chkRename.setToolTipText("Rename file after the method applied with random bytes.");

        jLabel2.setFont(new java.awt.Font("Verdana", 1, 11)); // NOI18N
        jLabel2.setText("Description:");

        lblDescription.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        lblDescription.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblDescription.setText("<html>This is the simplest scheme and overwrites data in a single pass with zero value bytes. The use of zero value data make it useful for virtual disk optimization.<br>However, it is suggested that the Random Data scheme or GOST R 50739-95 be preferred for general use.</html>");
        lblDescription.setToolTipText("Method's descriptions.");

        spnTimes.setModel(new javax.swing.SpinnerNumberModel(1, 1, 100, 1));
        spnTimes.setToolTipText("Number of times to run the algorithm.");

        jLabel4.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/times24.png"))); // NOI18N
        jLabel4.setText("Times:");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(243, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(cmbMethod, javax.swing.GroupLayout.PREFERRED_SIZE, 236, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(chkRename)
                .addGap(125, 125, 125)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(spnTimes, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(54, 54, 54))
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(lblDescription))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(cmbMethod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(chkRename)
                    .addComponent(spnTimes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4))
                .addGap(18, 18, 18)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(lblDescription, javax.swing.GroupLayout.DEFAULT_SIZE, 68, Short.MAX_VALUE)
                .addContainerGap())
        );

        btnAdd.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add24.png"))); // NOI18N
        btnAdd.setText("Add files");
        btnAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddActionPerformed(evt);
            }
        });

        btnRemove.setIcon(new javax.swing.ImageIcon(getClass().getResource("/remove24.png"))); // NOI18N
        btnRemove.setText("Remove files");
        btnRemove.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRemoveActionPerformed(evt);
            }
        });

        jLabel3.setFont(new java.awt.Font("Verdana", 1, 11)); // NOI18N
        jLabel3.setText("Total files: ");

        lblTotalFiles.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        lblTotalFiles.setText("0");

        mnuFile.setText("File");

        mnuAdd.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add20.png"))); // NOI18N
        mnuAdd.setText("Add...");
        mnuAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuAddActionPerformed(evt);
            }
        });
        mnuFile.add(mnuAdd);

        mnuDelete.setIcon(new javax.swing.ImageIcon(getClass().getResource("/del20.png"))); // NOI18N
        mnuDelete.setText("Delete");
        mnuFile.add(mnuDelete);

        mnuExit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/exit20.png"))); // NOI18N
        mnuExit.setText("Exit");
        mnuExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuExitActionPerformed(evt);
            }
        });
        mnuFile.add(mnuExit);

        mnuBar.add(mnuFile);

        mnuHelp.setText("Help");

        mnuSubHelp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/help20.png"))); // NOI18N
        mnuSubHelp.setText("Help");
        mnuHelp.add(mnuSubHelp);

        mnuAbout.setIcon(new javax.swing.ImageIcon(getClass().getResource("/about20.png"))); // NOI18N
        mnuAbout.setText("About");
        mnuAbout.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuAboutActionPerformed(evt);
            }
        });
        mnuHelp.add(mnuAbout);

        mnuBar.add(mnuHelp);

        setJMenuBar(mnuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(pnlFiles, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(jLabel3)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(lblTotalFiles)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(btnAdd, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(btnRemove)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(btnDelete, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(4, 4, 4))
                            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlFiles, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 30, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(btnRemove, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnDelete))
                        .addComponent(btnAdd, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel3)
                        .addComponent(lblTotalFiles)))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDeleteActionPerformed
        if (lst.size() > 0){
            ConfirmDelete cd = new ConfirmDelete(lst, cmbMethod.getSelectedIndex(), (int)spnTimes.getValue(), chkRename.isSelected());
            cd.setVisible(true);
        }
        else{
            JOptionPane.showMessageDialog(null, "Add at least a file for delete.", "Delete", JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_btnDeleteActionPerformed

    private void cmbMethodActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbMethodActionPerformed
        
        int x = cmbMethod.getSelectedIndex();
        
        if (x == 0){
            lblDescription.setText("<html>This is the simplest scheme and overwrites data in a single pass with zero value bytes. The use of zero value data make it useful for virtual disk optimization."
                    + "<br>However, it is suggested that the Random Data scheme or GOST R 50739-95 be preferred for general use.</html>");
        }
        else if (x == 1){
            lblDescription.setText("This scheme overwrites data in a single pass with pseudo-random values.");
        }
        else if (x == 2){
            lblDescription.setText("This scheme was originally defined in the Russian Federation and is sometimes refered to in the West as \"GOST P50739-95\".");
        }
        else if (x == 3){
            lblDescription.setText("<html>This data sanitization method was originally defined by the US National Industrial Security Program (NISP) in the document DOD 5220.22-M."
                    + "<br>This implementation also appears to be compliant with the following other schemes: HMG IS5, AFSSI-5020, and NAVSO P-5239-26."
                    + "<br>Although the DOD 5220.22-M overwrite scheme originated in US Department of Defense, it is no longer used within the various members of the CSA.");
        }
        else if (x == 4){
            lblDescription.setText("<html>The AR 380-19 sanitization method was originally defined in Army Regulation 380-19, published by the US Army."
                    + "<br>AR 380-19 is a flexible data sanitization standard as far as US government ones go. The overwriting characters in all three passes are completely customizable.");
        }
        else if (x == 5){
            lblDescription.setText("<html>The AFSSI-5020 sanitization method was originally defined in the Air Force System Security Instruction 5020"
                    + "by the United States Air Force (USAF). <br>It's unclear if the USAF still uses this data sanitization as its standard.");
        }
        else if (x == 6){
            lblDescription.setText("<html>The NAVSO P-5239-26 sanitization method was originally defined in"
                    + "<br>Navy Staff Office Publication 5239 Module 26: Information Systems Security Program Guidelines, published by the US Navy.");
        }
        else if (x == 7){
            lblDescription.setText("<html>The Schneier method was created by Bruce Schneier and appeared in his book"
                    + "<br>\"Applied Cryptography: Protocols, Algorithms, and Source Code in C\" (ISBN 978-0471128458).");
        }
        else if (x == 8){
            lblDescription.setText("The Pfitzner method consists entirely of random overwrites.");
        }
        else if (x == 9){
            lblDescription.setText("<html>The Gutmann method is an algorithm for securely erasing the contents of computer hard drives, such as files."
                    + "<br>Devised by Peter Gutmann and Colin Plumb, it does so by writing a series of 35 patterns over the region to be erased."
                    + "<br>The selection of patterns assumes that the user does not know the encoding mechanism used by the drive, so it includes patterns designed"
                    + "<br>specifically for three types of drives. A user who knows which type of encoding the drive uses can choose only those patterns intended for their drive."
                    + "<br>A drive with a different encoding mechanism would need different patterns.");
        }        
    }//GEN-LAST:event_cmbMethodActionPerformed

    private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddActionPerformed
        OpenFiles();
    }//GEN-LAST:event_btnAddActionPerformed

    private void btnRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRemoveActionPerformed
        if (lst.size() > 0){
            
            int opt = JOptionPane.showConfirmDialog(null, "Are you sure to remove all files ?", "Remove files", JOptionPane.YES_NO_OPTION);
            
            if (opt == JOptionPane.YES_OPTION){
                lst.clear();
                FileDescriptionModel model = new FileDescriptionModel(lst);
                jTable.setModel(model);
                lblTotalFiles.setText("0");
            }
            
        }
        else{
            JOptionPane.showMessageDialog(null, "There is not files to be removed in the list.", "Remove files", JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_btnRemoveActionPerformed

    private void mnuAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuAddActionPerformed
        OpenFiles();
    }//GEN-LAST:event_mnuAddActionPerformed

    private void mnuExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuExitActionPerformed
        this.dispose();
    }//GEN-LAST:event_mnuExitActionPerformed

    private void mnuAboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuAboutActionPerformed
        About about = new About();
        about.setVisible(true);
    }//GEN-LAST:event_mnuAboutActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            
            @Override
            public void run() {
                new Main().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAdd;
    private javax.swing.JButton btnDelete;
    private javax.swing.JButton btnRemove;
    private javax.swing.JCheckBox chkRename;
    private javax.swing.JComboBox cmbMethod;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable jTable;
    private javax.swing.JLabel lblDescription;
    private javax.swing.JLabel lblTotalFiles;
    private javax.swing.JMenuItem mnuAbout;
    private javax.swing.JMenuItem mnuAdd;
    private javax.swing.JMenuBar mnuBar;
    private javax.swing.JMenuItem mnuDelete;
    private javax.swing.JMenuItem mnuExit;
    private javax.swing.JMenu mnuFile;
    private javax.swing.JMenu mnuHelp;
    private javax.swing.JMenuItem mnuSubHelp;
    private javax.swing.JPanel pnlFiles;
    private javax.swing.JSpinner spnTimes;
    // End of variables declaration//GEN-END:variables
}
